#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <stdlib.h>

pid_t pid;

void ConductorStartBus(int sig)
{
    kill(getppid(),SIGUSR1);
}

void DriverStartBus(int sig)
{
    printf("let's gogogo\n");
}

void ConductorStopBus(int sig)
{
    kill(getppid(),SIGUSR2);
}

void DriverStopBus(int sig)
{
    printf("stop the bus\n");
}

void DriverEndBus(int sig)
{
    kill(pid,SIGUSR1);
}

void ConductorEndBus(int sig)
{
    printf("please get off the bus\n");
    exit(0);
}

int main(int argc,char const* argv[])
{
    pid=fork();
    if(-1==pid)
    {
        perror("fork err\n");
        return -1;
    }
    else if(pid==0)
    {
        signal(SIGTSTP,SIG_IGN);
        signal(SIGINT,ConductorStartBus);
        signal(SIGQUIT,ConductorStopBus);
        signal(SIGUSR1,ConductorEndBus);
        while(1)
        {
             pause();
        }
    }
    else
    {
        signal(SIGINT,SIG_IGN);
		signal(SIGQUIT,SIG_IGN);
        signal(SIGUSR1,DriverStartBus);
        signal(SIGUSR2,DriverStopBus);
        while(!signal(SIGTSTP,DriverEndBus))
        {
            pause();
        }
        wait(NULL);
    }
    
    return 0;
}